<?php 

namespace Home\Controller;
use Think\Controller;

class LoginController extends Controller
{
	/**
	 * 显示登入页面
	 */
	public function login()
	{
		$this->display();
	}

	/**
	 * 获取极验
	 */
	public function get_geetest()
	{
		$GtSdk = new \Org\Nx\Geetest(C("GEETEST_ID"), C("GEETEST_KEY"));
		$data = array(
			"user_id" => session('user_id'), # 网站用户id
			"client_type" => "web", #web:电脑上的浏览器；h5:手机上的浏览器，包括移动应用内完全内置的web_view；native：通过原生SDK植入APP应用的方式
			"ip_address" => $_SERVER["REMOTE_ADDR"] # 请在此处传输用户请求验证时所携带的IP
		);
		$status = $GtSdk->pre_process($data, 1);
		$_SESSION['gtserver'] = $status;
		$_SESSION['user_id'] = $data['user_id'];
		echo $GtSdk->get_response_str();
	}

	/**
	 * 验证极验
	 */
	public function geetest_ajax_check()
	{
		$data = array(
		        "user_id" => session('user_id'), # 网站用户id
		        "client_type" => "web", #web:电脑上的浏览器；h5:手机上的浏览器，包括移动应用内完全内置的web_view；native：通过原生SDK植入APP应用的方式
		        "ip_address" => $_SERVER["REMOTE_ADDR"] # 请在此处传输用户请求验证时所携带的IP
		    );

		$GtSdk = new \Org\Nx\Geetest(C("GEETEST_ID"), C("GEETEST_KEY"));
		if ($_SESSION['gtserver'] == 1) {   //服务器正常
		    $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $data);
		    if ($result) {
		        // return show(1, "成功——");
		    	// return $this->ajaxReturn(1);
		    	// 验证用户名和密码
		    	$res = $this->check_user_info($_POST["username"], $_POST["password"]);
		    	// var_dump($res); true
		    	if ($res) {
		    		// 登入成功
		    		// 将用户的信息存入session中
		    		$stuInfo = ["stuName"=>$_POST["username"]];
		    		session("stuInfo", $stuInfo);
		    		session("stuId", $res['id']);
		    		return $this->ajaxReturn(1);
		    	} else {
		    		// 用户名或账号错误
		    		return $this->ajaxReturn(2);
		    	}
		    } else{
		        // return show(0, "失败——");
		    	return $this->ajaxReturn(0);
		    }
		}else{  //服务器宕机,走failback模式
		    if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) {
		        return show(1, "成功");
		    }else{
		         return show(0, "失败");
		    }
		}
	}

	/**
	 * 判断用户登入的信息
	 */
	public function check_user_info($username, $password)
	{	
		// 通过输入的用户名判断是否存在该用户
		$data = M("User")->where([
				'username' => $username
			])->find();
		// print_r($data);
		if (empty($data)) return;
		$res = hash_verify($password, $data["password"]);
		if (!$res) return;
		// 更新用户最近的登入时间和ip地址
		$info = [
			'logintime' => time(),
			"loginip"	=> $_SERVER["REMOTE_ADDR"]
		];
		$res = M("user")->where([
				'username' => $username
			])->setField($info);
		if ($data) {
			return $data;
		}
		return false;
	}

	/**
	 * 退出登入
	 * @DateTime  2017-07-11T17:00:23+0800
	 */
	public function logout()
	{
		// 将学生的信息置空
		session("stuInfo", null);
		$this->redirect("Index/index");
	}
}